package com.suian.tools;

import java.util.ArrayList;

public class StringUtil {

    /**
     * 递归删除重复多余的AA
     *
     * @param string 需要处理的可能包含重复aa 或者AA的字符串
     * @return 处理完之后不包含重复aa或者 AA 的字符串
     */
    public static String strHandle2AA(String string) {
        String str = string;
        /*
         * 如果is2AAIndex(str)为true就一直执行
         */
        while (!is2AA(str)) {
            //找到下标
            int aaIndex = is2AAIndex(str);
            //处理后将返回结果
            ArrayList arrayList = strDelete2AA(str, aaIndex);
            str = list2Str(arrayList);
        }
        return str;
    }
    /**
     * 判断目标字符串中是否包含 两个AA
     *
     * @param str
     * @return
     */
    public static boolean is2AA(String str) {
        if (str.contains("aa aa") || str.contains("AA AA")) {
            //有两个AA
            return false;
        }
        //无重复AA
        return true;
    }

    /**
     * 判断第一个AA AA下标
     *
     * @param str
     * @return
     */
    public static int is2AAIndex(String str) {
        //aa bb 0f e3 3e 01 01 aa aa 01 01 01 01 aa cc a4
        /*
            将字符串转为数组
            找到字符串中aa的下标，如果后面的aa还是aa那么就将第一个aa去除，
         */
        String[] arr = strToArray(str);
        //遍历得到aa下标
        for (int i = 0; i < arr.length; i++) {
            if ((arr[i].equals("aa") || arr[i].equals("AA")) && (arr[i + 1].equals("aa") || arr[i + 1].equals("AA"))) {
                //出现重复aa
                return i;
            }
        }
        return -1;
    }


    /**
     * 根据所判断出的2 AA的下标，删除第一个aa
     */
    public static ArrayList strDelete2AA(String str, int index) {
        //将str转为数组
        String[] arr = strToArray(str);
        //转换数组
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            list.add(arr[i]);
        }
        //除了下标为index的
        list.remove(index);
        return list;
    }

    /**
     * arraylist转为str
     */
    public static String list2Str(ArrayList<String> list) {
        String str = "";
        for (String s : list) {
            str += s;
            str += " ";
        }
        return str;
    }
    /**
     * 字符串转数组
     *
     * @param str
     * @return
     */
    public static String[] strToArray(String str) {
        //aa bb 0f e3 3e 01 01 01 01 01 01 01 aa cc a4
        String str1 = str.trim();
        String[] total = str1.split("\\s+");
        return total;
    }
}

